package bookManage.Model.dao;

import bookManage.Model.entity.Book;
import bookManage.Model.entity.BookContent;
import bookManage.Model.entity.BookShow;

import java.sql.SQLException;
import java.util.List;

/**
 * @BelongsProject: library-management-system-master
 * @BelongsPackage: bookManage.Model.service
 * @Author: yuan wang
 * @CreateTime: 2023-02-01  08:58
 * @Description: Dao层，实现了对书籍的增删改查以及很多细节功能
 * @Version: 1.0
 */
public interface Dao {
    /**
     * @description: 添加书籍
     * @author: yuan wang
     * @date: 2023/1/29 15:18
     * @param: book 传入Book类参数，只针对书籍信息设置参数，其他信息默认为空
     * @return: int 返回修改行数，添加成功为1，失败为0
     */
    int addBook(Book book) throws SQLException;

    /**
     * @description: 删除书籍
     * @author: yuan wang
     * @date: 2023/1/29 15:20
     * @param: number 传入编号，从Servlet中获得编号参数
     * @return: int 返回修改行数，删除成功为1，失败为2
     */
    int delBook(int id) throws SQLException;

    /**
     * @description: 计算相同书籍（状态）数量
     * @author: yuan wang
     * @date: 2023/1/29 15:22
     * @param: number 传入自增主键，在Servlet中将获得自增主键参数
     * @param: status 传入需要查询的状态，如果需要查询全部状态的书籍数量则传入"所有"即可
     * @return: int 返回相同书籍数量
     */
    int countBook(String number, String status) throws SQLException;

    /**
     * @description: 编辑书籍（先把原来数据存进来，再修改）
     * @author: yuan wang
     * @date: 2023/2/1 10:58
     * @param: book 传入书籍
     * @param: oldNumber 传入原编号
     * @return: int 返回修改行数，修改成功则为正数，失败则为0
     */
    int editBook(Book book, String oldNumber) throws SQLException;

    /**
     * @description: 计算借阅次数方法
     * 由于存入数据库中的相同书籍，每本书都有其自己的借阅次数，因此需要把他们相加才是最终这一本书的总借阅次数，深感麻烦
     * @author: yuan wang
     * @date: 2023/2/1 15:41
     * @param: number 传入书籍编号
     * @return: int 返回借阅次数（总共的）
     */
    int borrowNumber(String number) throws SQLException;

    /**
     * @description: 查询书籍(非具体页面)
     * @author: yuan wang
     * @date: 2023/1/29 15:47
     * @param: status 传入选择，建议传入“所有”，“借出”，“逾期”，“在馆”等字段
     * @return: java.util.List<bookManage.Model.entity.BookShow> 返回书籍类列表
     */
    List<BookShow> queryBook(String choice) throws SQLException;

    /**
     * @description: 查询书籍（具体页面）无参方法
     * @author: yuan wang
     * @date: 2023/2/1 15:32
     * @param: number 传入书籍编号
     * @return: bookManage.Model.entity.Book 返回该书籍的详细信息
     */
    Book queryBookContent(String number) throws SQLException;

    /**
     * @description: 查询书籍（具体页面）有参方法
     * @author: yuan wang
     * @date: 2023/2/1 22:24
     * @param: number 传入书籍编号
     * @return: java.util.List<bookManage.Model.entity.BookContent> 返回该相同书籍中多本书籍的不同状态等信息
     */
    List<BookContent> queryBookContentList(String number) throws SQLException;

    /**
     * @description: 实现模糊查询
     * @author: yuan wang
     * @date: 2023/2/7 16:30
     * @param: bookName
     * @return: java.util.List<bookManage.Model.entity.BookShow>
     */
    List<BookShow> dimQueryBook(String bookName) throws SQLException;
}
